﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Messaging;

namespace Eventos
{
    public class Manejador:IDisposable
    {
        public bool EnviarEventoMOM(String IP_SERVIDOR, String NOMBRE_QUEUE, Evento evento){
            bool retorno=false;

            try
            {
                MessageQueue mq = new MessageQueue("FormatName:Direct=TCP:" + IP_SERVIDOR + "\\Private$\\" + NOMBRE_QUEUE);

                Message mensaje = new Message(evento);
                mensaje.Label = evento.Comando.ToString();
                mq.Send(mensaje);
                retorno = true;
            }
            catch(Exception ex){
                System.Console.WriteLine("Eventos:EnviarEvento: Error al enviar el evento.");
                System.Console.Write(ex.Message);
            }

            return retorno;
            
        }

        public bool EnviarEventoWCF(Evento evento)
        {
            bool retorno = false;

            try
            {
                ServiceReference1.IConciliacionWCF conciliacion = new ServiceReference1.ConciliacionWCFClient();

                ServiceReference1.EventoDTO eventoDTO = new ServiceReference1.EventoDTO();

                switch (evento.Comando.ToString())
                {
                    case "CARGA": eventoDTO.Comando = ServiceReference1.Comando.CARGA;
                        break;
                    case "CONEXION": eventoDTO.Comando = ServiceReference1.Comando.CONEXION;
                        break;
                    case "DESCARGA": eventoDTO.Comando = ServiceReference1.Comando.DESCARGA;
                        break;
                    case "DESCONEXION": eventoDTO.Comando = ServiceReference1.Comando.DESCONEXION;
                        break;
                    default:
                        break;
                }

                eventoDTO.IdSesion = evento.IdSesion;
                eventoDTO.IPCliente = evento.IPCliente;
                eventoDTO.Texto = evento.Texto;
                eventoDTO.Timestamp = evento.Timestamp;

                conciliacion.AgregarEvento(eventoDTO);
                retorno = true;
 
            }      
            catch(Exception ex ){
                Console.WriteLine("Eventos:Manejador: No se pudo registrar el evento en el servidor de conciliacion.");
                Console.Write(ex.Message);    
            }

            return retorno;

        }

        public void Dispose()
        {
            
        }
    }

}
